package com.cool.shark.service;

import com.cool.shark.pojo.dto.AddAdminDto;
import com.cool.shark.pojo.dto.AdminDto;
import com.cool.shark.pojo.dto.AdminUpdateDto;
import com.cool.shark.pojo.entity.Admin;
import com.cool.shark.pojo.vo.AdminListItemVO;
import com.cool.shark.pojo.vo.AdminStandardVO;
import com.cool.shark.pojo.vo.ProductCategoryVo;
import org.springframework.transaction.annotation.Transactional;

import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.util.List;

/**
 * @Name: AdminService
 * @Author: 西风残叶
 * @Date: 2024/3/31 20:51
 * @Version: 1.0
 * @TODO: TODO
 */
@Transactional
public interface AdminService {
    /**
     * 添加管理员信息的实现。
     * 该方法接收一个管理员信息的数据传输对象（AdminDto），用于添加新的管理员信息到数据库中。
     *
     * @param addAdminDto 管理员信息的数据传输对象，包含要添加的管理员信息的详细信息。
     *                    该参数不可为null，否则会触发异常。
     *                    <p>
     *                    注：该方法没有返回值，添加操作的结果通过其他方式（如界面提示或日志记录）进行反馈。
     */
    void addAdmin(AddAdminDto addAdminDto);

    /**
     * 登录功能的实现。
     * 该方法接收一个管理员信息的数据传输对象（AdminDto），用于验证管理员的登录凭证。
     *
     * @param adminDto 管理员信息的数据传输对象，包含登录所需的用户名和密码等信息。
     *                 该参数不可为null，否则会触发异常。
     *                 <p>
     *                 注：该方法没有返回值，登录验证的结果通过其他方式（如界面提示或日志记录）进行反馈。
     */
    Admin login(AdminDto adminDto);

    /**
     * 获取管理员列表项的视图对象列表。
     *
     * @return 返回一个包含管理员列表项视图对象的列表。每个视图对象代表一个管理员的列表项信息。
     */
    List<AdminListItemVO> list();

    /**
     * 获取管理员列表项的视图对象列表。
     *
     * @return 返回一个包含管理员列表项视图对象的列表。每个视图对象代表一个管理员的列表项信息。
     */
    List<ProductCategoryVo> getProductCategory();

    /**
     * 获取商品数量
     * 本方法不接受任何参数。
     *
     * @return 返回当前系统中的商品数量。返回类型为int。
     */
    int goodsCount();

    AdminStandardVO getAdminByUsername(String username);

    void updateAdmin(AdminUpdateDto adminUpdate);

    void deleteAdmin(String username);
}